﻿#define TEST
using Business.Base.Common;
using Business.Base.DB.DBRules;
using Business.Base.Service.Create;
using PLC;
using PumpAlgorithm;
using Pumptester.test;
using System;
using System.Numerics;
using System.Windows.Forms;


/// <summary>
/// V1.0  XYJ
/// 本软件写于2021年8月，对于作者来说，2019年至2021年是人生中最痛苦的的时间段
/// 我和我的孩子正在经历挫折，我一直苦于没有时间陪伴她，于深夜完成后有感而发。
/// 作为一个父亲是我深感自己的不尽职，同时也在埋怨这世界的不公和荒诞。
/// 但是无论是磨难还是喜悦，我们必须承受这个世界赠与的礼物。
/// 就如我的孩子一样，这个软件还处于很初级的阶段，也许会有很多问题，还需要很多轮的迭代才能完善。
/// 如果此生有幸能做一套不仅能解决自己的生计，还能给这个世界带来一点价值的话。
/// 那我希望以我的孩子清如命名该软件，并且将福报留给孩子，这样，我也不枉来世界走一趟。
/// 
/// V1.X 需要改进的点:
/// 1.架构梳理，继续拆分概念，如果可能，将计算逻辑和业务逻辑拆分开，让不同的人做不同的事。
/// 2.所有的变量名需要统一和规范命名，从数据库字段，到变量，再到控件的命名，做到统一规则，见名知意。
/// 3.基于第二点，需要建立一套数据字典。
/// 4.优化展示的界面。
/// 5.自动更新框架，设置版本概念，包括如何更改SQL。
/// 
/// V2.0 待更新内容：
/// 1. 硬件连接层增强，包括日志功能和可靠新功能
///    1.1 设置日志开关，用于记录接收的报文信息以及记录异常日志。
///    1.2 监控PLC和ModBus异常内容
///    1.3 添加PLC写入功能。
///    1.4 实现PLC写入后根据反馈自动读取操作。
///
/// 2. 优化界面
///    2.1 修改界面，尝试使用HZH的界面做可视化。
///    2.2 改善交互和报表（待细化）
///      2.2.1  添加产品维护模块
///      2.2.2  优化生成的曲线
///      2.2.3  使用HZH做界面的可视化，仪表盘。
/// 
/// 3. 可靠性
///    3.1 记录日志
///    3.2 
/// 
 #region
/// V1.1 修改和修复相问题
/// 1.添加客户字段，并且在生成报表的时候添加SQL语句
///   experiment表中新增customer字段
///   experiment表中新增pumpName字段
///   
/// 待改进：
/// 1.DataGrid 支持绑定测试记录列表，随着记录列表的值的变化而变化，并且支持编辑，并且测试记录输入值变化后，计算值立刻变化。
/// 2.支持测试报告导入后重新计算
/// 3.支持测试版本和正式版本的切换
/// 4.支持灵活的配置
/// 5.部分静态构造函数需要重构，因为C#的静态函数是异步调用的，因此务必不要在静态构造函数中初始化类的静态成员，避免难以定位的问题。
 #endregion

/// </summary>
namespace Pumptester
{
    static class Program
    {
       

        static void init()
        {
            ServiceContainer.init();
        }
       
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            init();

#if TEST
            //PLC.Global.init_EnvDataManager_Test();
#else
            //PLC.Global.init_EnvDataManager();
#endif
            //Application.Run(new UIDemo());
            //Application.Run(new MainForm());
            //Application.Run(new test.EnvDataReader());
            //Application.Run(new test.SerialFormDemo());
            //Application.Run(new test.SerialForm());
            //Application.Run(new test.ListView());




            Application.Run(new EntryForm());

        }
    }
}
